home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / faq-s.zip / MODEM.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-16  |  7KB  |  222 lines

  1. UNIT modem;
  2.  
  3. INTERFACE
  4.  
  5. USES
  6.    Dos, Crt, GlobType, PibTimer, Configrt;
  7.  
  8. var brecv,bsent:longint;
  9.     icomoffset:integer;
  10.     arq:boolean;
  11.  
  12. procedure sendchar (k:char);
  13. function numchars:integer;
  14. function getchar:char;
  15. procedure hangup;
  16. procedure setparam (comnum:byte; baud:word; parity:boolean);
  17. function carrier:boolean;
  18. procedure setterminalready (b:boolean);
  19. procedure dontanswer;
  20. procedure doanswer;
  21. procedure closeport;
  22. procedure clearinput;
  23. procedure clearoutput;
  24.  
  25.  
  26. PROCEDURE BIOS_RS232_Init( ComPort : INTEGER; ComParm : WORD );
  27. PROCEDURE Async_Close( Drop_DTR: BOOLEAN );
  28. PROCEDURE Async_Clear_Errors;
  29. PROCEDURE Async_Reset_Port( ComPort       : INTEGER;
  30.                             BaudRate      : WORD;
  31.                             Parity        : CHAR;
  32.                             WordSize      : INTEGER;
  33.                             StopBits      : INTEGER  );
  34. FUNCTION  Async_Open( ComPort       : INTEGER;
  35.                       BaudRate      : WORD;
  36.                       Parity        : CHAR;
  37.                       WordSize      : INTEGER;
  38.                       StopBits      : INTEGER  ) : BOOLEAN;
  39. PROCEDURE Async_Send( C : Char );
  40. FUNCTION Async_Receive( VAR C : Char ) : BOOLEAN;
  41. PROCEDURE Async_Receive_With_Timeout( Secs : INTEGER; VAR C : INTEGER );
  42. PROCEDURE Async_Stuff( Ch: CHAR );
  43. PROCEDURE Async_Find_Delay( VAR One_MS_Delay : INTEGER );
  44. PROCEDURE Async_Init( Async_Buffer_Max  : INTEGER;
  45.                       Async_OBuffer_Max : INTEGER;
  46.                       Async_High_Lev1   : INTEGER;
  47.                       Async_High_Lev2   : INTEGER;
  48.                       Async_Low_Lev     : INTEGER );
  49. FUNCTION  Async_Carrier_Detect : BOOLEAN;
  50. FUNCTION  Async_Carrier_Drop : BOOLEAN;
  51. PROCEDURE Async_Term_Ready( Ready_Status : BOOLEAN );
  52. FUNCTION  Async_Buffer_Check : BOOLEAN;
  53. FUNCTION  Async_Line_Error( VAR Error_Flags: BYTE ) : BOOLEAN;
  54. FUNCTION  Async_Ring_Detect : BOOLEAN;
  55. PROCEDURE Async_Send_Break;
  56. PROCEDURE Async_Send_String( S : AnyStr );
  57. PROCEDURE Async_Send_String_With_Delays( S          : AnyStr;
  58.                                          Char_Delay : INTEGER;
  59.                                          EOS_Delay  : INTEGER  );
  60. FUNCTION  Async_Percentage_Used : REAL;
  61. PROCEDURE Async_Purge_Buffer;
  62. FUNCTION  Async_Peek( Nchars : INTEGER ) : CHAR;
  63. PROCEDURE Async_Setup_Port( ComPort       : INTEGER;
  64.                             Base_Address  : INTEGER;
  65.                             IRQ_Line      : INTEGER;
  66.                             Int_Numb      : INTEGER );
  67. PROCEDURE Async_Release_Buffers;
  68. PROCEDURE Async_Flush_Input_Buffer;
  69. PROCEDURE Async_Drain_Input_Buffer( Max_Wait_Time : INTEGER );
  70. PROCEDURE Async_Flush_Output_Buffer;
  71. PROCEDURE Async_Drain_Output_Buffer( Max_Wait_Time : INTEGER );
  72. FUNCTION  Async_Port_Address_Given( Com_Port : INTEGER ) : BOOLEAN;
  73. PROCEDURE Async_Send_Now( C : Char );
  74. FUNCTION  Async_Wait_For_Quiet( Max_Wait : LONGINT;
  75.                                 Wait_Time: LONGINT  ) : BOOLEAN;
  76. PROCEDURE Async_Set_Rejection( Reject_Bad : BOOLEAN; Reject_Char : CHAR );
  77.  
  78. IMPLEMENTATION
  79.                                    (* Remove blank before $ in next *)
  80.                                    (* statement to get multitasking *)
  81.                                    (* defined.                      *)
  82. { $DEFINE MTASK }
  83.  
  84. (*$I PIBASYN1.MOD *)
  85. (*$I PIBASYN2.MOD *)
  86. (*$I PIBASYN3.MOD *)
  87.  
  88. procedure closeport;
  89. begin
  90. async_close(false);
  91. end;
  92.  
  93. procedure sendchar (k:char);
  94. begin
  95.   bsent:=bsent+1;
  96.   async_send(k);
  97. end;
  98.  
  99. function numchars:integer;
  100. var r:registers;
  101. begin
  102.  if async_buffer_check then   numchars:=1 else numchars:=0;
  103. end;
  104.  
  105. function getchar:char;
  106. var k:char;
  107. begin
  108. if async_receive(k) then begin
  109.  getchar:=k;
  110.  brecv:=brecv+1;
  111. end;
  112. end;
  113.  
  114. procedure hangup;
  115. begin
  116. async_term_ready(false);
  117. delay (500)
  118. end;
  119.  
  120. procedure setparam (comnum:byte; baud:word; parity:boolean);
  121. begin
  122.  if (not Async_Open(comnum,baud,'N',8,1)) then writeln ('[COM Port #',comnum,' Error!');
  123. end;
  124.  
  125. function carrier:boolean;
  126. begin
  127. carrier:=async_carrier_detect;
  128. end;
  129.  
  130. procedure setterminalready (b:boolean);
  131. begin
  132. async_term_ready(b);
  133. end;
  134.  
  135. procedure dontanswer;
  136. begin
  137.   setterminalready (false)
  138. end;
  139.  
  140. procedure doanswer;
  141. begin
  142.   setterminalready (true)
  143. end;
  144.  
  145. procedure clearinput;
  146. begin
  147. Async_Flush_Input_Buffer;
  148. end;
  149.  
  150. procedure clearoutput;
  151. begin
  152. Async_Flush_Output_Buffer;
  153. end;
  154.  
  155.  
  156. BEGIN (* PibAsync *)
  157.                                    (* Default communications parameters *)
  158.    Async_Do_CTS         := FALSE;
  159.    Async_Do_DSR         := FALSE;
  160.    Async_Hard_Wired_On  := FALSE;
  161.    Async_Break_Length   := 500;
  162.    Async_Do_XonXoff     := TRUE;
  163.    Async_OV_XonXoff     := TRUE;
  164.    Async_Buffer_Length  := inbuf;
  165.    Async_OBuffer_Length := outbuf;
  166.    Async_Reject_Noise   := True;
  167.    Async_Noise_Char     := CHR( 0 );
  168.  
  169.                                    (* Port addresses of each com port *)
  170.  
  171.    Default_Com_Base[1]  := COM1_Base;
  172.    Default_Com_Base[2]  := COM2_Base;
  173.    Default_Com_Base[3]  := COM3_Base;
  174.    Default_Com_Base[4]  := COM4_Base;
  175.  
  176.                                    (* IRQ line for each port *)
  177.  
  178.    Default_Com_Irq [1]  := COM1_Irq;
  179.    Default_Com_Irq [2]  := COM2_Irq;
  180.    Default_Com_Irq [3]  := COM3_Irq;
  181.    Default_Com_Irq [4]  := COM4_Irq;
  182.  
  183.                                    (* Pick up address of send-a-character *)
  184.                                    (* routine, which is used by INLINE    *)
  185.                                    (* code.                               *)
  186.  
  187.    Async_Send_Addr := ADDR( Async_Send );
  188.                                    (* Pick up address of send-a-character *)
  189.                                    (* routine, which is used by INLINE    *)
  190.                                    (* code.                               *)
  191.  
  192.    Async_Send_Addr := ADDR( Async_Send );
  193.  
  194.                                    (* Set CTS checking *)
  195.  
  196.                                    (* Set XON/XOFF to user request *)
  197.  
  198.    Async_Do_XonXoff     :=false;
  199.  
  200.                                    (* Set hard-wired as user requests *)
  201.  
  202.  
  203. Async_Hard_Wired_On  := false;
  204. if async_hard_wired_on then begin
  205.  async_do_cts:=false;
  206.  async_do_dsr:=false;
  207. end else begin
  208.    Async_Do_CTS:=true;
  209.    Async_Do_DSR:=false;
  210.  
  211. end;
  212.                                    (* Set half-second break duration *)
  213.    Async_Break_Length   := 500;
  214.  
  215.                                    (* Let XON/XOFF break points default. *)
  216.  
  217.    Async_Init( 256, 512, 0, 0, 0);
  218.  
  219.  
  220.  
  221. END   (* PibAsync *).
  222.